#!/bin/bash

# 显示使用说明
show_usage() {
    echo "使用方法: $0 [环境] [JDK路径]"
    echo "  环境: dev, sit, odev, prod, oprod (默认: dev)"
    echo "  JDK路径: 可选，如果为空则使用环境变量JAVA_HOME"
    echo ""
    echo "示例:"
    echo "  $0 dev                    # 使用dev环境，默认JDK"
    echo "  $0 prd /usr/lib/jvm/jdk1.8.0_202  # 使用prd环境，指定JDK路径"
    echo "  $0                        # 使用默认dev环境，默认JDK"
    echo ""
    echo "数据库配置说明:"
    echo "  - dev/sit/odev/oprd: 使用MySQL数据库（配置文件中指定）"
    echo "  - prd: 使用H2内存数据库（自动初始化）"
}

# 检查参数
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
    show_usage
    exit 0
fi

ENV=${1:-dev}
JDK_PATH=${2:-}

# 验证环境参数
VALID_ENVS=("dev" "sit" "odev" "prod" "oprod")
if [[ ! " ${VALID_ENVS[@]} " =~ " ${ENV} " ]]; then
    echo "[ERROR] 无效的环境参数: $ENV"
    echo "支持的环境: ${VALID_ENVS[*]}"
    show_usage
    exit 1
fi

# 设置JDK路径
if [ -n "$JDK_PATH" ]; then
    # 使用传入的JDK路径
    JAVA_HOME="$JDK_PATH"
    echo "[INFO] 使用指定的JDK路径: $JAVA_HOME"
else
    # 使用环境变量JAVA_HOME
    if [ -z "$JAVA_HOME" ]; then
        echo "[ERROR] 未指定JDK路径且环境变量JAVA_HOME未设置"
        show_usage
        exit 1
    fi
    echo "[INFO] 使用环境变量JAVA_HOME: $JAVA_HOME"
fi

JAVA_CMD="$JAVA_HOME/bin/java"

# 检查JDK是否存在
if [ ! -f "$JAVA_CMD" ]; then
    echo "[ERROR] JDK不存在: $JAVA_CMD"
    exit 1
fi

# 检查 JDK 版本
JAVA_VERSION=$($JAVA_CMD -version 2>&1 | awk -F '"' '/version/ {print $2}')
if [[ $JAVA_VERSION != 1.8* ]]; then
    echo "[ERROR] 需要 JDK 1.8，请先安装并配置 JAVA_HOME。当前版本: $JAVA_VERSION"
    exit 1
fi

# 查找 fatjar
JAR_NAME=$(ls ./*.jar | grep 'code-knowledge-sample' | head -n 1)
if [ ! -f "$JAR_NAME" ]; then
    echo "[ERROR] 未找到可执行 fatjar，请先上传或编译。"
    exit 1
fi

echo "== 启动服务: $JAR_NAME =="
echo "== 启动环境: $ENV =="
echo "== JDK版本: $JAVA_VERSION =="

# 根据环境显示数据库信息
if [ "$ENV" = "prd" ]; then
    echo "== 数据库: H2 (内存数据库) =="
    echo "[INFO] H2控制台将在启动后可用: http://localhost:8083/h2-console"
    echo "[INFO] JDBC URL: jdbc:h2:mem:codeknowledgesample"
    echo "[INFO] Username: sa"
    echo "[INFO] Password: (empty)"
else
    echo "== 数据库: MySQL/MariaDB (配置文件) =="
fi

# 启动应用，设置Spring Boot的profile
nohup $JAVA_CMD -jar "$JAR_NAME" --spring.profiles.active="$ENV" > app.log 2>&1 &
PID=$!

echo "服务已在后台启动，PID: $PID"
echo "日志输出到 app.log"
echo "使用 'tail -f app.log' 查看实时日志" 